package org.terramagnet.workflow.dynamic.databinding;

/**
 * 数据类型.
 *
 * @param T 程序中实际使用的类型
 * @author terrason
 */
public interface DataType<T> {
    /**
     * 数据类型用户友好名称.
     */
    public String caption();
    /**
     * 从字符串转换.
     *
     * @param text 字符串值
     * @param defaultValue 无法转换时返回该值
     * @return 转换后的值
     */
    public T parse(String text, T defaultValue);

    /**
     * 从字符串转换.
     *
     * @param text 字符串值
     * @return 转换后的值
     * @throws IllegalArgumentException 无法转换时抛出此异常
     */
    public T parse(String text) throws IllegalArgumentException;

    /**
     * 转换成字符串.
     *
     * @param value 实际值
     * @return 转换后的字符串
     */
    public String format(T value);

    /**
     * 长度.
     */
    public int length();

    /**
     * 精度.
     */
    public int precision();
}
